O'zbek

Loyihalaringizda kod xavfsizligi va bashorat qilinuvchanligini oshirib, o'zgarmas tipni aniqlash uchun TypeScript const assertions kuchini oching. Amaliy misollar yordamida ulardan samarali foydalanishni o'rganing.

TypeScript Const Assertions: Ishonchli kod uchun o'zgarmas tiplarni aniqlash

JavaScript'ning ustki to'plami bo'lgan TypeScript veb-dasturlashning dinamik dunyosiga statik tiplashtirishni olib kiradi. Uning kuchli xususiyatlaridan biri bu tipni aniqlashdir, bunda kompilyator o'zgaruvchining tipini avtomatik ravishda aniqlaydi. TypeScript 3.4 da taqdim etilgan const assertions tipni aniqlashni keyingi bosqichga olib chiqadi, bu sizga o'zgarmaslikni ta'minlash va yanada ishonchli va bashorat qilinadigan kod yaratish imkonini beradi.

Const Assertions nima?

Const assertions — bu TypeScript kompilyatoriga qiymatni o'zgarmas deb niyat qilganingizni bildirish usuli. Ular literal qiymat yoki ifodadan keyin as const sintaksisi yordamida qo'llaniladi. Bu kompilyatorga ifoda uchun eng tor (literal) tipni aniqlashni va barcha xususiyatlarni readonly deb belgilashni buyuradi.

Mohiyatan, const assertions o'zgaruvchini shunchaki const bilan e'lon qilishdan ko'ra kuchliroq tip xavfsizligini ta'minlaydi. const o'zgaruvchining o'zini qayta tayinlashni oldini olsa-da, u o'zgaruvchi ishora qilayotgan obyekt yoki massivni o'zgartirishni oldini olmaydi. Const assertions obyekt xususiyatlarining o'zgartirilishini ham oldini oladi.

Const Assertions'dan foydalanishning afzalliklari

Amaliy misollar

1-misol: Literal bilan oddiy foydalanish

Const assertion bo'lmasa, TypeScript message tipini string deb aniqlaydi:


const message = "Hello, World!"; // Type: string

Const assertion bilan TypeScript tipni "Hello, World!" literal satri sifatida aniqlaydi:


const message = "Hello, World!" as const; // Type: "Hello, World!"

Bu sizga literal satr tipini yanada aniqroq tip ta'riflari va taqqoslashlarda ishlatish imkonini beradi.

2-misol: Massivlar bilan Const Assertions'dan foydalanish

Ranglar massivini ko'rib chiqaylik:


const colors = ["red", "green", "blue"]; // Type: string[]

Massiv const bilan e'lon qilingan bo'lsa ham, siz uning elementlarini o'zgartirishingiz mumkin:


colors[0] = "purple"; // No error
console.log(colors); // Output: ["purple", "green", "blue"]

Const assertion qo'shish orqali TypeScript massivni readonly satrlar kortezhi sifatida aniqlaydi:


const colors = ["red", "green", "blue"] as const; // Type: readonly ["red", "green", "blue"]

Endi massivni o'zgartirishga urinish TypeScript xatosiga olib keladi:


// colors[0] = "purple"; // Error: Index signature in type 'readonly ["red", "green", "blue"]' only permits reading.

Bu colors massivining o'zgarmas bo'lib qolishini ta'minlaydi.

3-misol: Obyektlar bilan Const Assertions'dan foydalanish

Massivlarga o'xshab, obyektlarni ham const assertions yordamida o'zgarmas qilish mumkin:


const person = {
  name: "Alice",
  age: 30,
}; // Type: { name: string; age: number; }

const bilan bo'lsa ham, siz person obyektining xususiyatlarini o'zgartirishingiz mumkin:


person.age = 31; // No error
console.log(person); // Output: { name: "Alice", age: 31 }

Const assertion qo'shish obyektning xususiyatlarini readonly qiladi:


const person = {
  name: "Alice",
  age: 30,
} as const; // Type: { readonly name: "Alice"; readonly age: 30; }

Endi obyektni o'zgartirishga urinish TypeScript xatosiga olib keladi:


// person.age = 31; // Error: Cannot assign to 'age' because it is a read-only property.

4-misol: Ichki o'rnatilgan obyektlar va massivlar bilan Const Assertions'dan foydalanish

Const assertions chuqur o'zgarmas ma'lumotlar tuzilmalarini yaratish uchun ichki o'rnatilgan obyektlar va massivlarga qo'llanilishi mumkin. Quyidagi misolni ko'rib chiqing:


const config = {
  apiUrl: "https://api.example.com",
  endpoints: {
    users: "/users",
    products: "/products",
  },
  supportedLanguages: ["en", "fr", "de"],
} as const;

// Type:
// {
//   readonly apiUrl: "https://api.example.com";
//   readonly endpoints: {
//     readonly users: "/users";
//     readonly products: "/products";
//   };
//   readonly supportedLanguages: readonly ["en", "fr", "de"];
// }

Bu misolda, config obyekti, uning ichidagi endpoints obyekti va supportedLanguages massivi hammasi readonly deb belgilangan. Bu konfiguratsiyaning hech bir qismi ish vaqtida tasodifan o'zgartirilmasligini ta'minlaydi.

5-misol: Funksiya qaytaradigan tiplar bilan Const Assertions

Funksiyaning o'zgarmas qiymat qaytarishini ta'minlash uchun const assertions'dan foydalanishingiz mumkin. Bu, ayniqsa, kirish ma'lumotlarini o'zgartirmasligi yoki o'zgaruvchan natija bermasligi kerak bo'lgan yordamchi funksiyalarni yaratishda foydalidir.


function createImmutableArray(items: T[]): readonly T[] {
  return [...items] as const;
}

const numbers = [1, 2, 3];
const immutableNumbers = createImmutableArray(numbers);

// Type of immutableNumbers: readonly [1, 2, 3]

// immutableNumbers[0] = 4; // Error: Index signature in type 'readonly [1, 2, 3]' only permits reading.

Foydalanish holatlari va stsenariylar

Konfiguratsiyani boshqarish

Const assertions ilova konfiguratsiyasini boshqarish uchun idealdir. Konfiguratsiya obyektlaringizni as const bilan e'lon qilish orqali siz konfiguratsiyaning ilova hayotiy sikli davomida izchil qolishini ta'minlay olasiz. Bu kutilmagan xatti-harakatlarga olib kelishi mumkin bo'lgan tasodifiy o'zgartirishlarning oldini oladi.


const appConfig = {
  appName: "My Application",
  version: "1.0.0",
  apiEndpoint: "https://api.example.com",
} as const;

Konstantalarni aniqlash

Const assertions, shuningdek, maxsus literal tiplarga ega konstantalarni aniqlash uchun ham foydalidir. Bu tip xavfsizligini va kodning aniqligini yaxshilashi mumkin.


const HTTP_STATUS_OK = 200 as const; // Type: 200
const HTTP_STATUS_NOT_FOUND = 404 as const; // Type: 404

Redux yoki boshqa holatni boshqarish kutubxonalari bilan ishlash

Redux kabi holatni boshqarish kutubxonalarida o'zgarmaslik asosiy tamoyildir. Const assertions sizning reducer'laringiz va action creator'laringizda o'zgarmaslikni ta'minlashga yordam beradi, bu esa holatning tasodifiy o'zgarishini oldini oladi.


// Example Redux reducer

interface State {
  readonly count: number;
}

const initialState: State = { count: 0 } as const;

function reducer(state: State = initialState, action: { type: string }): State {
  switch (action.type) {
    default:
      return state;
  }
}

Xalqarolashtirish (i18n)

Xalqarolashtirish bilan ishlaganda, sizda ko'pincha qo'llab-quvvatlanadigan tillar to'plami va ularga mos keladigan lokal kodlari mavjud bo'ladi. Const assertions bu to'plamning o'zgarmas bo'lib qolishini ta'minlaydi, bu sizning i18n joriy etishingizni buzishi mumkin bo'lgan tasodifiy qo'shimchalar yoki o'zgartirishlarning oldini oladi. Masalan, ingliz (en), fransuz (fr), nemis (de), ispan (es) va yapon (ja) tillarini qo'llab-quvvatlashni tasavvur qiling:


const supportedLanguages = ["en", "fr", "de", "es", "ja"] as const;

type SupportedLanguage = typeof supportedLanguages[number]; // Type: "en" | "fr" | "de" | "es" | "ja"

function greet(language: SupportedLanguage) {
  switch (language) {
    case "en":
      return "Hello!";
    case "fr":
      return "Bonjour!";
    case "de":
      return "Guten Tag!";
    case "es":
      return "¡Hola!";
    case "ja":
      return "こんにちは!";
    default:
      return "Greeting not available for this language.";
  }
}

Cheklovlar va e'tiborga olinadigan jihatlar

Const Assertions'ga alternativlar

Const assertions o'zgarmaslikni ta'minlash uchun kuchli vosita bo'lsa-da, siz ko'rib chiqishingiz mumkin bo'lgan boshqa yondashuvlar ham mavjud:

Eng yaxshi amaliyotlar

Xulosa

TypeScript const assertions kodingizda o'zgarmaslikni ta'minlash va tip xavfsizligini yaxshilash uchun qimmatli vositadir. as const yordamida siz kompilyatorga qiymat uchun eng tor tipni aniqlashni va barcha xususiyatlarni readonly deb belgilashni buyurishingiz mumkin. Bu tasodifiy o'zgarishlarning oldini olishga, kodning bashorat qilinuvchanligini yaxshilashga va yanada aniqroq tip tekshiruvini ochishga yordam beradi. Const assertions'ning ba'zi cheklovlari bo'lsa-da, ular TypeScript tiliga kuchli qo'shimcha bo'lib, ilovalaringizning mustahkamligini sezilarli darajada oshirishi mumkin.

TypeScript loyihalaringizga const assertions'ni strategik ravishda kiritish orqali siz yanada ishonchli, qo'llab-quvvatlanadigan va bashorat qilinadigan kod yozishingiz mumkin. O'zgarmas tipni aniqlash kuchini qabul qiling va dasturiy ta'minotni ishlab chiqish amaliyotingizni yuqori darajaga ko'taring.

TypeScript Const Assertions: Ishonchli kod uchun o'zgarmas tiplarni aniqlash | MLOG